const debug = process.env.NODE_ENV !== 'production'
const path = require('path')
// const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const CompressionPlugin = require('compression-webpack-plugin')
const productionGzipExtensions = ['js', 'css', 'json']
function resolve(dir) {
    return path.join(__dirname, dir)
}
module.exports = {
    // 基本路径
    publicPath: './',
    // 输出文件目录
    outputDir: 'dist',
    assetsDir: 'assets',
    // eslint-loader 是否在保存的时候检查
    lintOnSave: true,
    // webpack配置
    // see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md
    chainWebpack: config => {
        config.externals({
            'Cesium': 'Cesium',
            'XE': 'XE',
            'AMap': 'AMap'
            // 'XbsjEarthUI': 'XbsjEarthUI'
        })
        // config.module
        //     .rule('imports-loader')
        //     .test(/\.mtl$|\.obj$/)
        //     .use('file')
        //     .loader('file-loader')
        //     .end()
        // config.module
        //     .rule('json-loader')
        //     .test(/\.yml$/)
        //     .use('json-loader')
        //     .loader('json-loader')
        //     .end() 66D9EF
        config.module
            .rule('compile')
            .test(/\.js$/)
            .include
            .add(resolve('node_modules/element-ui/packages'))
            .add(resolve('node_modules/element-ui/src'))
            .end()
            .exclude
            .add(resolve('node_modules/element-ui/src/utils/date.js'))
            .end()
            .use('babel')
            .loader('babel-loader')
        config.module
            .rule('svg')
            .exclude.add(resolve('src/icons'))
            .end()
        config.module
            .rule('icons')
            .test(/\.svg$/)
            .include.add(resolve('src/icons'))
            .end()
            .use('svg-sprite-loader')
            .loader('svg-sprite-loader')
            .options({
                symbolId: 'icon-[name]'
            })
            .end()
        config.module
            .rule('worker')
            .test(/webworker\.js$/)
            .use('worker-loader')
            .loader('worker-loader')
            .options({
                name: 'worker.bundle.js',
                publicPath: './',
                inline: true, fallback: false
            })
            .end()
        config.module.rule('js').exclude.add(/webworker\.js$/)
    },
    configureWebpack: config => {
        if (!debug) {
            config.plugins.push(
                new CompressionPlugin({
                    filename: '[path].gz[query]',
                    algorithm: 'gzip',
                    test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),
                    threshold: 10240,
                    minRatio: 0.8
                })
            )
            // config.plugins.push(new BundleAnalyzerPlugin())
        } else {
            config.devtool = 'source-map'
        }
    },
    // 生产环境是否生成 sourceMap 文件
    productionSourceMap: debug,
    // css相关配置
    css: {
        // 是否使用css分离插件 ExtractTextPlugin
        extract: true,
        // 开启 CSS source maps?
        sourceMap: false,
        // css预设器配置项
        loaderOptions: {},
        // 启用 CSS requireModuleExtension for all css / pre-processor files.
        requireModuleExtension: true
    },
    // use thread-loader for babel & TS in production build
    // enabled by default if the machine has more than 1 cores
    parallel: require('os').cpus().length > 1,
    // webpack-dev-server 相关配置
    devServer: {
        open: process.platform === 'darwin',
        host: '0.0.0.0',
        port: 8080,
        https: false,
        hotOnly: false,
        proxy: {
            '/test': {
                target: 'http://localhost:9000', // 接口的域名
                // secure: false,  // 如果是https接口，需要配置这个参数
                changeOrigin: true, // 如果接口跨域，需要进行这个参数配置
                pathRewrite: {
                    '^/test': '/'
                }
            },
            '/Data': {
                target: 'http://localhost:8999', // 接口的域名
                // secure: false,  // 如果是https接口，需要配置这个参数
                changeOrigin: true, // 如果接口跨域，需要进行这个参数配置
                pathRewrite: {
                    '^/Data': '/'
                }
            },
            '/dataTest': {
                target: 'http://124.71.115.164:9999', // 接口的域名
                // secure: false,  // 如果是https接口，需要配置这个参数
                changeOrigin: true, // 如果接口跨域，需要进行这个参数配置
                pathRewrite: {
                    '^/dataTest': '/'
                }
            },
            '/3Dtile': {
                target: 'http://192.168.2.200:9999', // 接口的域名
                // target: 'http://192.168.2.99:9000', // 接口的域名
                // secure: false,  // 如果是https接口，需要配置这个参数
                changeOrigin: true, // 如果接口跨域，需要进行这个参数配置
                pathRewrite: {
                    '^/3Dtile': '/'
                }
            }
        },
        before: app => { }
    },
    // 第三方插件配置
    pluginOptions: {
        // ...
        // resolve: {
        //     modules: [path.resolve('node_modules'), 'node_modules']
        // }
    }
}